package ve.com.wayoyo.wuml_case.DibujoDiagramas;

import java.util.ArrayList;

import ve.com.wayoyo.wuml_case.DataTipe;
import ve.com.wayoyo.wuml_case.Exceptions.AtributoERException;
import ve.com.wayoyo.wuml_case.Exceptions.TipoDatoException;

public class CompAtributoER implements Cloneable {

	private static ArrayList<String> TipoDeDatosSinLongitud = new ArrayList<String>();

	private String NombreVariable;
	private String TipoDato;
	private String Longitud;
	private String Decimals;
	private boolean isPrimaryKey;
	private boolean isUnique;
	private boolean isNull;
	private boolean isAutoIncrement;
	private boolean isIndex;

	public CompAtributoER clone() throws CloneNotSupportedException {
		return (CompAtributoER) super.clone();
	}

	public boolean isPrimaryKey() {
		return isPrimaryKey;
	}

	public void setPrimaryKey(boolean isPrimaryKey) {
		this.isPrimaryKey = isPrimaryKey;
	}

	public boolean isUnique() {
		return isUnique;
	}

	public void setUnique(boolean isUnique) {
		this.isUnique = isUnique;
	}

	public boolean isNull() {
		return isNull;
	}

	public void setNull(boolean isNull) {
		this.isNull = isNull;
	}

	public boolean isAutoIncrement() {
		return isAutoIncrement;
	}

	public void setAutoIncrement(boolean isAutoIncrement) {
		this.isAutoIncrement = isAutoIncrement;
	}

	public boolean isIndex() {
		return isIndex;
	}

	public void setIndex(boolean isIndex) {
		this.isIndex = isIndex;
	}

	public CompAtributoER(String nombreVariable) throws AtributoERException {
		this.setNombreVariable(nombreVariable);
		TipoDeDatosSinLongitud.add("DATE");
		TipoDeDatosSinLongitud.add("TIME");
		TipoDeDatosSinLongitud.add("TIMESTAMP");
		TipoDeDatosSinLongitud.add("DATETIME");
		TipoDeDatosSinLongitud.add("YEAR");
		TipoDeDatosSinLongitud.add("TINYBLOB");
		TipoDeDatosSinLongitud.add("BLOB");
		TipoDeDatosSinLongitud.add("MEDIUMBLOB");
		TipoDeDatosSinLongitud.add("LONGBLOB");
		//
		TipoDeDatosSinLongitud.add("INT");
		TipoDeDatosSinLongitud.add("FLOAT");
	}

	public String getNombreVariable() {
		return NombreVariable;
	}

	public void setNombreVariable(String nombreVariable)
			throws AtributoERException {
		if (nombreVariable.equals(""))
			throw new AtributoERException();
		NombreVariable = nombreVariable;
	}

	public String getTipoDato() {
		return TipoDato;
	}

	public void setTipoDato(String tipoDato) throws AtributoERException,
			TipoDatoException {
		if (tipoDato.equals(""))
			throw new AtributoERException();
		if (VistaDiagrama.getVista() != null
				&& !DataTipe.getInstancia().dataExist(tipoDato))
			throw new TipoDatoException();
		TipoDato = tipoDato;
	}

	public String getText() {
		String Respuesta = "";
		if (isPrimaryKey) {
			Respuesta = "#* ";
		} else if (isNull) {
			Respuesta = " o ";
		} else if (!isNull) {
			Respuesta = " * ";
		}
		Respuesta = Respuesta + NombreVariable;

		return Respuesta;
	}

	public String generarDOM() {
		String DOM = "\t\t<AtributoER NombreVariable=\"" + NombreVariable
				+ "\" TipoDato=\"" + TipoDato + "\" Logitud=\"" + Longitud
				+ "\" isPrimaryKey=\"" + isPrimaryKey + "\" isUnique=\""
				+ isUnique + "\" isNull=\"" + isNull + "\" isAutoIncrement=\""
				+ isAutoIncrement + "\" isIndex=\"" + isIndex
				+ "\"  subEntidad=\"No-Aplica\"/>\n";
		return DOM;
	}

	public String generarDOM(String padre) {
		String DOM = "\t\t<AtributoER NombreVariable=\"" + NombreVariable
				+ "\" TipoDato=\"" + TipoDato + "\" Logitud=\"" + Longitud
				+ "\" isPrimaryKey=\"" + isPrimaryKey + "\" isUnique=\""
				+ isUnique + "\" isNull=\"" + isNull + "\" isAutoIncrement=\""
				+ isAutoIncrement + "\" isIndex=\"" + isIndex
				+ "\" subEntidad=\"" + padre + "\"/>\n";
		return DOM;
	}

	public String getLongitud() {
		return Longitud;
	}

	public void setLongitud(String longitud) throws AtributoERException {
		if (longitud.equals(""))
			throw new AtributoERException();
		Longitud = longitud;
	}

	public String getQueryDeclaration() {
		String query;
		query = NombreVariable + " " + TipoDato;
		if (!(TipoDeDatosSinLongitud.contains(TipoDato))) {
			query += "( " + Longitud + " )";
		}
		if (!isNull) {
			query += " NOT NULL";
		}
		if (!isPrimaryKey && isUnique) {
			query += " UNIQUE";
		}
		return query;
	}

	public String getQueryDeclarationUnaTabla() {
		String query;
		query = NombreVariable + " " + TipoDato;
		if (TipoDeDatosSinLongitud.contains(TipoDato)) {
			query += "( " + Longitud + " )";
		}
		if (!isPrimaryKey && isUnique) {
			query += " UNIQUE";
		}
		return query;
	}

	public String getDecimals() {
		return Decimals;
	}

	public void setDecimals(String decimals) throws AtributoERException {
		if (decimals.equals(""))
			throw new AtributoERException();

		this.Decimals = decimals;
	}
}
